<?php
class Util
{	
	/**
	 * Imprime una tabla HTML.
	 * @param string $id el id de la tabla
	 * @param Array $columns array de strings con los nombres de las columnas.
	 * @param Array $rows matriz registros por filas. En otras palabras, un array de filas de tabla, donde
	 * las filas son arrays de celdas.
	 */
	static function printTable($columns, $rows, $id = null)
	{
		if($id != null){
			echo "<table id='$id' />\n";	
		} else {
			echo "<table>\n";
		}
		echo "<tbody>\n";
		foreach($columns as $name){
			echo "<th>$name</th>\n";
		}
		echo "</tbody>\n";
		echo "<tbody>\n";
		$columnsCount = count($columns);
		foreach($rows as $row){
			echo "<tr>\n";
			// controlo no pasarme de la cantidad de columnas.
			for($i=0; $i<$columnsCount; $i++){
				echo "<td>$row[$i]</td>\n";
			}
			echo "</tr>\n";
		}
		echo "</tbody>\n";
		echo "</table>\n";
	}	
	
	static function printTableFromDbArray($dbArray, $columns = null)
	{
		// Si no se especificaron nombres para las columnas,
		// utilizo el nombre de los campos en la BBDD.
		if($columns == null){
			$firstElement = $dbArray[0];
			$columns = array();
			$i = 0;
			foreach($firstElement as $name => $value){
				$columns[$i] = $name;
				$i++;
			}
		}
		// Lleno las filas.
		$container = array();
		$iContainer = 0;
		foreach($dbArray as $element){
			$row = array();
			$iRow = 0;
			foreach($element as $key => $value){
				$row[$iRow] = $value;
				$iRow++;
			}
			$container[$iContainer] = $row;
			$iContainer++;
		}
		
		Util::printTable($columns, $container);
	}
		
	/**
	 * Imprime una form con un di�logo para cada propiedad y un bot�n de submit. 
	 * @param Array $names Mapea $fieldName => $screenName.
	 * @param string $formName Nombre del formulario.
	 * @param string $redirect URL del archivo a redireccionar.
	 */
	static function printBasicForm($names, $redirect, $post, $cancel = 'welcome.php', $formName = 'form1', $container = 'contenidos')
	{
		$valores = "'";
		$primero = true;
		foreach($names as $fieldName => $screenName){
			if(!$primero){
				$valores = $valores . "+'&";
			}
			$valores = $valores .
				"$fieldName='+document.getElementById('$fieldName').value";
			$primero = false;
		}
		echo "<form name='$formName' method='POST' onsubmit=\"redirect('./$redirect', '$container', $valores, 'POST'); return false\" action='#'>\n";
		echo "<div class='menu'>\n";
		foreach($names as $fieldName => $screenName){
			if($fieldName != "pass"){
				echo "<div class='label'>$screenName</div>
				<input class='box' type='text' value='$post[$fieldName]' id='$fieldName' />\n<br>\n";
			} else {
				echo "<div class='label'>$screenName</div>
				<input class='box' type='password' value='$post[$fieldName]' id='$fieldName' />\n<br>\n";
			}
		}
		echo "<input class='button' type='submit' value='Aceptar' />\n";
		?>
		<input class="button" type="button" value="Cancelar" onClick="redirect('./<?php echo $cancel ?>', '<?php echo $container?>', '', 'POST')" />
		<?php
		echo "</div>\n";
		echo "</form>\n";
	}
	
	static function redirect($url)
	{
		//If manual page redirects have been enabled then print some html
		$debug = true;
		if ($debug) {
			echo "<b>Redirect:</b> You are being redirected to: <br /><a href='$url'>$url</a><br />\n";
			echo "Backtrace: <br /><pre>\n";
			debug_print_backtrace ();
			echo "</pre>";
		} else {
			header ( "Location: $url" );
		}
		exit ( 0 );
	}
	
	/**
	 * FIXME: cambiar por la función PHP que corresponda.
	 * Quita el elemento en la posición $index de $array. 
	 * @param Array $array El array a alterar.
	 * @param integer $index El índice del elemento a quitar.
	 */
	static function removeElementFromArray($array, $index)
	{
		$newIndex = 0;
		$newArray = array();
		$iterator = 0;
		foreach($array as $element) {
			if($iterator != $index){
				$newArray[$newIndex] = $array[$iterator];
				$newIndex++;
			}
			$iterator++;
		}
		return $newArray;
	}
	
	/**
	 * Escribe en el output el código con el que debe comenzar un cuadro
	 * del estilo de los de TreeView.
	 */
	static function beginTableBoilerplate()
	{
	?>
			<td width="178" valign="top">
				<table cellpadding="4" cellspacing="0" border="0" width="100%">
					<tr>
						<td bgcolor="#ECECD9">
							<table cellspacing="0" cellpadding="2" border="0" width="100%">
								<tr>
									<td bgcolor="white">
									<table border=0><tr><td><font size=-2><a style="font-size:7pt;text-decoration:none;color:silver" href="http://www.treemenu.net/" target=_blank></a></font></td></tr></table>
	<?php
	}
	
	/**
	 * Escribe en el output el código con el que debe terminar un cuadro
	 * del estilo de los de TreeView.
	 */
	static function endTableBoilerplate()
	{
	?>
									</td>
								</tr>
							</table>
						</td>
					</tr>
				</table>
			</td>
	<?php
	}
	
}